package com.virtual.common.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.util.AttributeSet;

import androidx.appcompat.widget.AppCompatTextView;

import com.virtual.common.R;

/**
 * 功能描述：可设置背景样式的文本
 *
 * @author 黄一凡
 * @date 2018/8/17 0017
 */

public class ShapeTextView extends AppCompatTextView {
  private float cornersRadius;//文本圆角
  private int solidColor;//背景色
  private float strokeWidth;//边框宽度
  private int strokeColor;//边框颜色
  private Context mContext;

  public ShapeTextView(Context context) {
    this(context, null);
  }

  public ShapeTextView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public ShapeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    mContext = context;
    getAttr(attrs);
  }

  private void getAttr(AttributeSet attrs) {
    TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.ShapeTextView);
    cornersRadius = typedArray.getDimension(R.styleable.ShapeTextView_shapeTextView_cornersRadius, 0);
    solidColor = typedArray.getColor(R.styleable.ShapeTextView_shapeTextView_solidColor, getContext().getResources().getColor(R.color.transparence));
    strokeWidth = typedArray.getDimension(R.styleable.ShapeTextView_shapeTextView_strokeWidth, 0);
    strokeColor = typedArray.getColor(R.styleable.ShapeTextView_shapeTextView_strokeColor, getContext().getResources().getColor(R.color.transparence));
    typedArray.recycle();
    setDrawable();
  }

  private void setDrawable() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
      setBackground(getDrawable());
    } else {
      setBackgroundDrawable(getDrawable());
    }
  }
  public void setSolidColor(int solidColor) {
    this.solidColor = solidColor;
    setDrawable();
  }

  /**
   * 设置GradientDrawable
   */
  private GradientDrawable getDrawable() {
    GradientDrawable gradientDrawable = new GradientDrawable();
    gradientDrawable.setShape(GradientDrawable.RECTANGLE);
    if (cornersRadius > 0) {
      gradientDrawable.setCornerRadius(cornersRadius);//设置圆角的半径
    }
    gradientDrawable.setColor(solidColor);
    if (strokeWidth > 0) {
      gradientDrawable.setStroke(Math.round(strokeWidth), strokeColor);
    }
    return gradientDrawable;
  }
}